package com.dateConstruction._04_seqQueue;

import com.dateConstruction._02_singlyLinkedList.PrimeList;
import com.dateConstruction._02_singlyLinkedList.SinglyLinkedList;

public class PrimeRing {
    public static void PrimeRing(Integer[] values) {
        // 创建空顺序队列
        Queue<Integer> queue = new CirSeqQueue<Integer>(values.length);
        // values所有元素入队
        for (int i = 0; i < values.length; i++) {
            queue.add(values[i]);
        }
        System.out.println("初始队列queue：" + queue.toString());
        
        // 创建素数表，使用单链表
        PrimeList prime = new PrimeList(values.length * 2);
        System.out.println(prime.toString());
        // 使用单链表存储素数环
        SinglyLinkedList<Integer> ring = new SinglyLinkedList<Integer>();
        // 出队一个元素
        int last = queue.poll();
        // 素数环尾插入
        ring.insert(last);
        System.out.println(queue + ", " + ring);
        while (!queue.isEmpty()) {
            System.out.println(queue + ", " + ring + ", " + last);
            // 出队一个元素
            int key = queue.poll();
            // 若last + key是素数
            if (prime.isPrime(key + last)) {
                ring.insert(key);
                last = key;
            } else {
                queue.add(key);
            }
        }
        System.out.println("1~" + values.length + "素数环：" + ring.toString());
        
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Integer[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        PrimeRing(arr);
    }

}
